
package bienvenido;
import com.mysql.jdbc.Statement;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import javax.swing.*;
import java.sql.*;

public class Login extends javax.swing.JDialog implements ActionListener {
    public static boolean ingresar = false;
    public static boolean cerrar = false;
    public static Administrador admi;

    //Creacion de la interfaz de db - - - - - - - - - - - - - - -
    public JLabel aviso = new JLabel();
    public JLabel aviso2 = new JLabel();
    public JLabel db_titulo = new JLabel();
    public JLabel db_direccion = new JLabel();
    public JLabel label_bd = new JLabel();
    public JTextField db_url = new JTextField();
    public JTextField db_user = new JTextField();
    public JLabel label_db_user = new JLabel();
    public JPasswordField db_pass1 = new JPasswordField();
    public JLabel label_db_pass1 = new JLabel();
    public JPasswordField db_pass2 = new JPasswordField();
    public JLabel label_db_pass2 = new JLabel();
    public JButton db_ok = new JButton();
    public static Escribir metodos = new Escribir();
    
    public static String URL;
    public static String USER;
    public static String PASSWORD;
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    public JButton Boton_Ingresar = new JButton();
    public JButton registro = new JButton();
    public JTextField user = new JTextField();
    public JPasswordField pass = new JPasswordField();
    public JLabel label1 = new JLabel();
    public JLabel label2 = new JLabel();

    public JButton Boton_Registrar = new JButton();
    public JTextField nombre = new JTextField();
    public JTextField apellido = new JTextField();
    public JTextField user2 = new JTextField();
    public JTextField pass2 = new JTextField();
    public JTextField codigo = new JTextField();
    public JLabel label3 = new JLabel();
    public JLabel label4 = new JLabel();
    public JLabel label5 = new JLabel();
    public JLabel label6 = new JLabel();
    public JLabel label7 = new JLabel();
    public JLabel titulo = new JLabel();
    
    private String Ingreso_Usuario;
    private String Ingreso_Contraseña;

    private String Registro_Nombre;
    private String Registro_Apellido;
    private String Registro_Usuario;
    private String Registro_Contraseña;
    private String Registro_Codigo;
    
    public Login(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        //Acceso Administradores
        titulo.setBounds(100, 30, 200, 20);
        titulo.setText("Acceso Administradores");
        titulo.setFont(new java.awt.Font("Dialog", 1, 14));//aquí se modifica la fuente;estilo 1negrita,2normal,3cursiva;tamaño
        titulo.setVisible(false);

        //Acceso Administradores
        user.setBounds(140, 100, 150, 30);
        user.setText("");
        user.setVisible(false);

        //Acceso Administradores
        pass.setBounds(140, 140, 150, 30);
        pass.setText("");
        pass.setVisible(false);

        // Acceso Administradores
        label1.setText("Usuario");
        label1.setBounds(80, 100, 80, 30);
        label1.setVisible(false);

        // Acceso Administradores
        label2.setText("Contraseña");
        label2.setBounds(80, 140, 80, 30);
        label2.setVisible(false);
        
        // Acceso Administradores
        Boton_Ingresar.setBounds(70, 230, 90, 30);
        Boton_Ingresar.setText("Ingresar");
        Boton_Ingresar.addActionListener(this);
        Boton_Ingresar.setVisible(false);

        // Acceso Administradores
        registro.setBounds(210, 230, 90, 30);
        registro.setText("Registrarse");
        registro.addActionListener(this);
        registro.setVisible(false);

        // Registro
        Boton_Registrar.setBounds(150, 250, 100, 30);
        Boton_Registrar.setText("Registrar");
        Boton_Registrar.setVisible(false);
        Boton_Registrar.addActionListener(this);

        // Registro
        nombre.setBounds(140, 30, 150, 30);
        nombre.setText("");
        nombre.setVisible(false);

        // Registro
        apellido.setBounds(140, 70, 150, 30);
        apellido.setText("");
        apellido.setVisible(false);

        // Registro
        user2.setBounds(140, 110, 150, 30);
        user2.setText("");
        user2.setVisible(false);

        // Registro
        pass2.setBounds(140, 150, 150, 30);
        pass2.setText("");
        pass2.setVisible(false);

        // Registro
        codigo.setBounds(140, 190, 150, 30);
        codigo.setText("");
        codigo.setVisible(false);

        // Registro
        label3.setText("Usuario");
        label3.setBounds(20, 110, 80, 30);
        label3.setVisible(false);

        // Registro
        label4.setText("Contraseña");
        label4.setBounds(20, 150, 80, 30);
        label4.setVisible(false);

        // Registro
        label5.setText("Código de Registro");
        label5.setBounds(20, 190, 200, 30);
        label5.setVisible(false);

        // Registro
        label6.setText("Nombre");
        label6.setBounds(20, 30, 80, 30);
        label6.setVisible(false);

        // Registro
        label7.setText("Apellidos");
        label7.setBounds(20, 70, 80, 30);
        label7.setVisible(false);

        //Valores db - - - - - - - - - - - - - - - - - - -
        db_titulo.setText("Datos de Conexión MySQL");
        db_titulo.setBounds(90, 10, 200, 20);
        db_titulo.setFont(new java.awt.Font("Dialog", 1, 14));
        db_titulo.setVisible(false);
        aviso.setText("Antes de comenzar a utilizar la aplicación, es necesario que ingrese");
        aviso.setBounds(10, 30, 350, 30);
        aviso.setVisible(false);
        aviso2.setText("los datos correspondientes a su conexión MySQL. ");
        aviso2.setBounds(10, 45, 350, 30);
        aviso2.setVisible(false);
        db_direccion.setText("Url conexión");
        db_direccion.setBounds(20, 80, 80, 30);
        db_direccion.setVisible(false);
        db_url.setText("");
        db_url.setBounds(130, 80, 140, 30);
        db_url.setVisible(false);
        label_bd.setText("/db_bienvenido");
        label_bd.setBounds(275, 80, 100, 30);
        label_bd.setVisible(false);
        label_db_user.setText("Usuario MySQL");
        label_db_user.setBounds(20, 120, 80, 30);
        label_db_user.setVisible(false);
        db_user.setBounds(130, 120, 220, 30);
        db_user.setText("");
        db_user.setVisible(false);
        label_db_pass1.setText("Contraseña");
        label_db_pass1.setBounds(20, 160, 80, 30);
        label_db_pass1.setVisible(false);
        db_pass1.setText("");
        db_pass1.setBounds(130, 160, 220, 30);
        db_pass1.setVisible(false);
        label_db_pass2.setText("Reingrese contraseña");
        label_db_pass2.setBounds(20, 200, 200, 30);
        label_db_pass2.setVisible(false);
        db_pass2.setText("");
        db_pass2.setBounds(130, 200, 220, 30);
        db_pass2.setVisible(false);
        db_ok.setText("OK");
        db_ok.setBounds(130, 250, 100, 30);
        db_ok.addActionListener(this);
        db_ok.setVisible(false);
        // - - - - - - - - - - - - - - - - - - - - - - - -


        this.add(titulo);
        this.add(Boton_Ingresar);
        this.add(registro);
        this.add(user);
        this.add(pass);
        this.add(label1);
        this.add(label2);
        this.add(nombre);
        this.add(apellido);
        this.add(user2);
        this.add(pass2);
        this.add(codigo);
        this.add(label3);
        this.add(label4);
        this.add(label5);
        this.add(label6);
        this.add(label7);
        this.add(Boton_Registrar);
        // - - - - - - - - - - - - - - - - - -
        this.add(aviso);
        this.add(aviso2);
        this.add(db_titulo);
        this.add(label_db_user);
        this.add(label_db_pass1);
        this.add(label_db_pass2);
        this.add(label_bd);
        this.add(db_ok);
        this.add(db_user);
        this.add(db_pass1);
        this.add(db_pass2);
        this.add(db_direccion);
        this.add(db_url);
        // - - - - - - - - - - - - - - - - - -
        try{
            int rev = Integer.parseInt(metodos.leer("backup.dat"));
            
            if (rev == 0){
                db_titulo.setVisible(true);
                label_db_user.setVisible(true);
                db_user.setVisible(true);
                label_db_pass1.setVisible(true);
                db_pass1.setVisible(true);
                label_db_pass2.setVisible(true);
                db_pass2.setVisible(true);
                db_ok.setVisible(true);
                label_bd.setVisible(true);
                db_direccion.setVisible(true);
                db_url.setVisible(true);
                aviso.setVisible(true);
                aviso2.setVisible(true);
            }
            else{
                 titulo.setVisible(true);
                 user.setVisible(true);
                 pass.setVisible(true);
                 label1.setVisible(true);
                 label2.setVisible(true);
                 Boton_Ingresar.setVisible(true);
                 registro.setVisible(true);

                 String texto = metodos.leer2("datos_MySQL.dat");
                 texto = texto.trim();
                 URL = texto.substring(0, texto.indexOf("\n"));
                 USER = texto.substring(texto.indexOf("\n")+1, texto.lastIndexOf("\n"));
                 PASSWORD = texto.substring(texto.lastIndexOf("\n")+1,texto.length());
            }
        }catch(NumberFormatException e){
            System.out.println("1.Error de tipo numero");
        }

        
        
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setName("Form"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public static void login(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Login dialog = new Login(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                            System.exit(0);
                        
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    public void actionPerformed(ActionEvent e) {
        
        if (e.getSource() == db_ok){
            if (db_url.getText().length()!=0 && db_user.getText().length()!=0 && db_pass1.getText().length()!=0 && db_pass1.getText().equals(db_pass2.getText())){
                //Se ingresaron Datos correctos, se pueden ingresar.
                
                String url = db_url.getText()+"/db_bienvenido";
                String usuario = db_user.getText();
                String passw = db_pass1.getText();
                boolean exito = true;
                
                ResultSet Estadisticas = null;
                Connection conn = null;
                int contConex=0;
                try {
                    Class.forName("org.gjt.mm.mysql.Driver");
                    conn = DriverManager.getConnection(url, usuario, passw);
                    Statement SentenciaSQL = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
                    Estadisticas = SentenciaSQL.executeQuery("SELECT *FROM estadisticas");
                    Estadisticas.first();
                    contConex = Estadisticas.getInt("ConexExitosas");
                    Estadisticas.close();
                    conn.close();
                    SentenciaSQL.close();
                    if (conn != null){
                       
                        conn.close();
                    }
                }
                catch(SQLException ex) {
                    System.out.println("Hubo un problema al intentar conectarse con la base de datos estadistica(getconexExitosas)"+url);
                    System.out.println(ex);
                    exito = false;
                }
                catch(ClassNotFoundException ex) {
                    System.out.println(ex);
                    exito = false;
                }
                
                if (exito){
                    setTitle("Login");
                    try{
                        int rev = Integer.parseInt(metodos.leer("backup.dat"));
                        rev = rev +1 ;
                        String a = rev+"";
                        metodos.escrbir("backup.dat", a);
                    }
                    catch(NumberFormatException h){
                        System.out.println("2.Error del tipo numero");
                    }
                    catch(FileNotFoundException j){
                        System.out.print("Archivo no encontrado");
                    }
                    
                    //ocultamos interfaz db
                    db_titulo.setVisible(false);
                    label_db_user.setVisible(false);
                    db_user.setVisible(false);
                    label_db_pass1.setVisible(false);
                    db_pass1.setVisible(false);
                    label_db_pass2.setVisible(false);
                    db_pass2.setVisible(false);
                    db_ok.setVisible(false);
                    db_direccion.setVisible(false);
                    db_url.setVisible(false);
                    aviso.setVisible(false);
                    aviso2.setVisible(false);
                    label_bd.setVisible(false);

                    //mostramos interfaz login
                    titulo.setVisible(true);
                    user.setVisible(true);
                    pass.setVisible(true);
                    label1.setVisible(true);
                    label2.setVisible(true);
                    Boton_Ingresar.setVisible(true);
                    registro.setVisible(true);
                    
                    //guardamos datos en un .dat
                    
                    try{
                        metodos.escrbir("datos_MySQL.dat", url+"\n"+usuario+"\n"+passw);
                        String texto = metodos.leer2("datos_MySQL.dat");
                        texto = texto.trim();
                        URL = texto.substring(0, texto.indexOf("\n"));
                        USER = texto.substring(texto.indexOf("\n")+1, texto.lastIndexOf("\n"));
                        PASSWORD = texto.substring(texto.lastIndexOf("\n")+1,texto.length());
                       

                    }
                    catch(FileNotFoundException j){
                        System.out.print("Archivo no encontrado");
                    }
                }
                else{
                    JOptionPane.showMessageDialog(null,"No se pudo realizar la conexión con la base de datos.","Error",JOptionPane.ERROR_MESSAGE );
                    db_url.setText("");
                    db_user.setText("");
                    db_pass1.setText("");
                    db_pass2.setText("");
                }
                
            }
            else{
                JOptionPane.showMessageDialog(null,"Error en el ingreso de datos","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                db_url.setText("");
                db_user.setText("");
                db_pass1.setText("");
                db_pass2.setText("");
            }
        }
        if(e.getSource() == Boton_Ingresar){
             if (user.getText().length()==0 || pass.getText().length()==0){
                JOptionPane.showMessageDialog(null,"Verifique contenido de campos a completar","Error",JOptionPane.ERROR_MESSAGE);
            }
            else{
                Ingreso_Usuario = (user.getText()).trim();
                Ingreso_Contraseña = pass.getText();
                admi = new Administrador("","",Ingreso_Usuario,Ingreso_Contraseña,"");
                TestConnection aux = new TestConnection();
                if(!aux.existeAdministrador(admi)){
                    JOptionPane.showMessageDialog(null,"Usuario y Contraseña no coinciden o usted no está registrado. Si no lo está, por favor registrese.","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
                else{//ingresa al programa
                    this.ingresar = true;
                    this.setVisible(false);
                }
            }
        }
        if(e.getSource() == registro){
            setTitle("Registro");
            Boton_Ingresar.setVisible(false);
            registro.setVisible(false);
            user.setText("");
            user.setVisible(false);
            pass.setText("");
            pass.setVisible(false);
            label1.setVisible(false);
            label2.setVisible(false);
            titulo.setVisible(false);

            Boton_Registrar.setVisible(true);
            nombre.setVisible(true);
            apellido.setVisible(true);
            user2.setVisible(true);
            pass2.setVisible(true);
            codigo.setVisible(true);
            label3.setVisible(true);
            label4.setVisible(true);
            label5.setVisible(true);
            label6.setVisible(true);
            label7.setVisible(true);
        }
        if(e.getSource() == Boton_Registrar){
            if (nombre.getText().length()==0 || apellido.getText().length()==0 
            || user2.getText().length()<6 || pass2.getText().length()<6 || codigo.getText().length()==0){
                if(nombre.getText().length()==0){
                    JOptionPane.showMessageDialog(null,"Verifique llenar campo Nombre","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
                if(apellido.getText().length()==0){
                    JOptionPane.showMessageDialog(null,"Verifique llenar campo Apellido","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
                if(user2.getText().length()<6){
                    JOptionPane.showMessageDialog(null,"Verifique campo Usuario, debe tener un mínimo de 6 caracteres","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
                if(pass2.getText().length()<6){
                    JOptionPane.showMessageDialog(null,"Verifique campo Contraseña, debe tener un mínimo de 6 caracteres","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
                if(codigo.getText().length()==0){
                    JOptionPane.showMessageDialog(null,"Verifique llenar campo Código de Registro","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                }
            }
            else{
                Registro_Nombre = (nombre.getText()).trim();
                Registro_Apellido = (apellido.getText()).trim();
                Registro_Usuario = (user2.getText()).trim();
                Registro_Contraseña = (pass2.getText()).trim();
                Registro_Codigo = (codigo.getText()).trim();
                Administrador administrador = new Administrador(Registro_Nombre,Registro_Apellido,Registro_Usuario,Registro_Contraseña,Registro_Codigo);
                boolean pasa = true;
                TestConnection aux = new TestConnection();
                if(aux.verificaAdministrador(Registro_Nombre, Registro_Apellido)){
                    JOptionPane.showMessageDialog(null,"Nombre y apellidos ya están registrados","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                    pasa = false;
                }
                
                if(aux.verificaAdministrador(Registro_Usuario)){
                    JOptionPane.showMessageDialog(null,"Nombre de usuario ya existe","Advertencia",JOptionPane.INFORMATION_MESSAGE);    
                    pasa = false;
                }
                if(pasa){
                    
                    if(aux.existeContraseña(Registro_Codigo)){//si esta la contraseña de registro en la bd, agrega al administrador a la bd Y BORRA LA CONTRASEÑAREGISTRO
                        aux = new TestConnection();
                        aux.agregarAdministrador(administrador);
                        Boton_Registrar.setVisible(false);
                        nombre.setText("");
                        nombre.setVisible(false);
                        apellido.setText("");
                        apellido.setVisible(false);
                        user2.setText("");
                        user2.setVisible(false);
                        pass2.setText("");
                        pass2.setVisible(false);
                        codigo.setText("");
                        codigo.setVisible(false);
                        label3.setVisible(false);
                        label4.setVisible(false);
                        label5.setVisible(false);
                        label6.setVisible(false);
                        label7.setVisible(false);
                        titulo.setVisible(true);
                        setTitle("Login");
                        Boton_Ingresar.setVisible(true);
                        registro.setVisible(true);
                        user.setVisible(true);
                        pass.setVisible(true);
                        label1.setVisible(true);
                        label2.setVisible(true);
                    }
                    else{
                        JOptionPane.showMessageDialog(null,"El Código de Registro ya fue utilizado o no es correcto","Advertencia",JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

}
